package br.com.fogas.database.dao.impl;

import java.sql.SQLException;
import java.util.List;

import br.com.fogas.database.FogasDatabase;
import br.com.fogas.database.IMetadata.ICliente;
import br.com.fogas.database.IMetadata.IMedidor;
import br.com.fogas.database.dao.IMedidorDao;
import br.com.fogas.database.entidade.Cliente;
import br.com.fogas.database.entidade.Medidor;
import br.com.fogas.webservice.parser.cliente.T_Medidor_Item;

import com.j256.ormlite.dao.BaseDaoImpl;
import com.j256.ormlite.stmt.QueryBuilder;

public class MedidorDao extends BaseDaoImpl<Medidor, Integer> implements IMedidorDao {
	
	private FogasDatabase database;
	
	public MedidorDao(FogasDatabase database) throws SQLException {
		super(database.getConnectionSource(), Medidor.class);
		this.database = database;
	} 

	@Override
	public void sincronizar(List<T_Medidor_Item> medidores) throws SQLException {
		for (T_Medidor_Item item : medidores) {
			List<Cliente> cliente = database.getCliente().queryForEq(ICliente.tx_cod_cliente, item.getCLIENTE());
			List<Cliente> local = database.getCliente().queryForEq(ICliente.tx_cod_cliente, item.getLOCAL_ID());
			
			if(cliente.size() == 1 && local.size() == 1) {
				Medidor medidor = new Medidor(item, cliente.get(0), local.get(0));
				create(medidor);
			} else {
				String msg = "Cliente ou local n�o encontrado para o medidor : "+item.getCOD_MEDIDOR();
				throw new SQLException(msg);
			}
		}
	}
	
	@Override
	public List<Medidor> listarMedidoresPorLocal(Cliente local) throws SQLException {
		QueryBuilder<Medidor, Integer> qb = queryBuilder();
		List<Medidor> medidores = qb.where().eq(IMedidor.tx_cod_local, local).query();
		return medidores;
	}

	@Override
	public List<Medidor> listarMedidoresPorCliente(Cliente cliente) throws SQLException {
		QueryBuilder<Medidor, Integer> qb = queryBuilder();
		List<Medidor> medidores = qb.where().eq(IMedidor.tx_cod_cliente, cliente).query();
		return medidores;
	}

	@Override
	public Medidor listarMedidorPorCodigo(String codigo) throws SQLException {
		QueryBuilder<Medidor, Integer> qb = queryBuilder();
		List<Medidor> medidores = qb.where().eq(IMedidor.tx_cod_medidor, codigo).query();
		
		if(medidores.size() == 1) {
			return medidores.get(0);
		} else {
			return null;
		}
	}
}